import os
from configparser import ConfigParser


class Conf:
    """
        用于读取配置文件中配置信息
    """

    def __init__(self):
        self.conf = ConfigParser()
        self.root_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
        self.f = os.path.join(self.root_path, "conf", "config.ini")
        self.conf.read(self.f, encoding='UTF-8')

    def get_config_file(self):
        return self.f

    def read_conf(self, m, n):
        """
        读取制定配置信息
        :param m: 配置文件中的section名称
        :param n: option的名称
        :return: option的值
        """
        return self.conf.get(m, n)

    def read_options(self, s):
        """
        读取制定section内的所有option的名称
        :param s: section名称
        :return: List[str], option列表
        """
        return self.conf.options(s)

    def read_sections(self):
        """
        读取配置文件中所有section
        :return: List[str], section列表
        """
        return self.conf.sections()

    def read_bool_conf(self, m, n, default=False):
        """
        读取boolean类型的值
        :param default: 默认为False
        :param m: 配置文件中的section名称
        :param n: option的名称
        :return: boolean option的值
        """
        v = self.conf.getboolean(m, n)
        if v is None:
            return default
        return v

    def read_float_conf(self, m, n, default=0.0):
        """
        读取float类型的值
        :param default: 默认为0.0
        :param m: 配置文件中的section名称
        :param n: option的名称
        :return: float option的值
        """
        v = self.conf.getfloat(m, n)
        if v is None:
            return default
        return v

    def read_int_conf(self, m, n, default=0):
        """
        读取int类型的值
        :param m: 配置文件中的section名称
        :param n: option的名称
        :return: int option的值
        """
        v = self.conf.getint(m, n)
        if v is None:
            return default
        return v


config = Conf()
